package the.broccoli.uc.service;

import org.wisteria.framework.web.mvc.service.ISuperService;
import the.broccoli.auth.SessionUser;
import the.broccoli.uc.dto.AdminUserAddDTO;
import the.broccoli.uc.dto.Secret;
import the.broccoli.uc.entity.User;

import java.util.List;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author lei.liu
 * @since 2018-10-12
 */
public interface IUserService extends ISuperService<User> {

    boolean addAdminUser(AdminUserAddDTO dto);

    User saveAdmin(String account, String userName, Integer tenantId, String operatorId, String operatorName);

    /**
     * 新增用户，并创建默认租户
     * @param account      账号Ø
     * @param userName     用户名
     * @param tenantName   租户名称
     * @param operatorId   操作人ID
     * @param operatorName 操作人名称
     * @return
     */
    User save(String account, String userName, String tenantName, String operatorId, String operatorName);

    /**
     * 新增用户，用户的登录账号为账号，手机号码，并创建默认租户
     *
     * @param account      账号
     * @param userName     用户名
     * @param phone        手机号码
     * @param operatorId   操作人ID
     * @param operatorName 操作人名称
     * @return
     */
    User save(String account, String userName, String phone, String tenantName, String operatorId, String operatorName);

    /**
     * 校验并新增用户，设置默认密码
     * @param entity    用户信息
     * @return
     */
    void saveAndCheck(User entity);

    /**
     * 校验并新增用户
     * @param entity    用户信息
     * @param password  密码
     * @return
     */
    void saveAndCheck(User entity, String password);

    /**
     * 通过登录账号，手机号码，邮箱地址。获取用户信息
     *
     * @param loginAccount 登录账号、手机号码、邮箱地址
     * @return 用户信息
     */
    User getByLoginAccount(String loginAccount);

    Secret getByUserId(String userId);

    /**
     * 获取用户名
     * @param userId    用户ID
     * @return
     */
    String getUserNameById(String userId);

    void updatePassword(String userId, String password, String modifiedId, String modifiedName);
    void updatePassword(String userId, String OldPassword, String newPassword, String modifiedId, String modifiedName);

    List<User> listByUserType(String userType);

    SessionUser getSessionUser(String token);

    boolean updateLoginExpire(String userId);

    User getByUnionId(String unionId);

}
